<template>
	<view class="ai-container">
		<view class="chat-area">
			<!-- 消息列表 -->
			<view class="message-list">
				<view class="system-message">
					我是您的健康助手，有什么可以帮助您的吗？
				</view>
				
				<view 
					v-for="(msg, index) in messages" 
					:key="index" 
					:class="msg.role === 'user' ? 'user-message' : 'ai-message'"
				>
					<text class="sender">{{ msg.role === 'user' ? '您' : '健康助手' }}：</text>
					<text class="content">{{ msg.content }}</text>
				</view>
				
				<view class="loading" v-if="showHint">
					<text>健康助手正在思考...</text>
				</view>
			</view>
			
			<!-- 输入区域 -->
			<view class="input-area">
				<textarea
					v-model="userInput"
					placeholder="请输入您的问题..."
					class="input-box"
				></textarea>
				<button @click="sendMessages" class="send-btn" :disabled="!userInput.trim() || showHint">
					发送
				</button>
			</view>
		</view>
	</view>
</template>

<script setup>
import { ref } from 'vue';	
import OpenAI from "openai"; // 保留openai库

// 1. 关键：给openai配置uni.request适配器（解决手机端fetch缺失问题）
const openai = new OpenAI({
	apiKey: "sk-2bb3ca0816e1416ba2b1ba3071e37a68",
	baseURL: "https://api.deepseek.com/v1/chat/completions",
	dangerouslyAllowBrowser: true,
	// 自定义fetch适配器：用uni.request替代默认的fetch
	fetch: (input, init) => {
		// 解析openai库传过来的请求参数
		const url = typeof input === 'string' ? input :baseURL.value;
		const method = init.method || 'POST';
		const headers = init.headers || {};
		const body = init.body ? JSON.parse(init.body) : {};

		// 用uni.request发起请求（适配手机端）
		return new Promise((resolve, reject) => {
			uni.request({
				url: url,
				method: method,
				header: headers,
				data: body,
				success: (res) => {
					// 把uni.request的响应格式，转换成openai库能识别的格式
					resolve({
						ok: res.statusCode >= 200 && res.statusCode < 300,
						status: res.statusCode,
						json: () => Promise.resolve(res.data), // 关键：提供json()方法
						headers: new Headers(res.header)      // 适配headers格式
					});
				},
				fail: (err) => {
					reject(new Error(`请求失败：${err.errMsg}`));
				}
			});
		});
	}
});

// 2. 系统预设消息
const systemMessage = {
  role: "system",
  content: "你是一位专业的健康助手，为用户提供健康咨询和建议，但不能替代医生诊断。要用友好的语气回复。"
};

// 3. 状态管理
const userInput = ref('');
const messages = ref([]);
const showHint = ref(false);

// 4. 发送消息 + 调用openai库（保留openai库的调用逻辑）
const sendMessages = async () => {
	// uni.showLoading({
	// 	title:'请求中'
	// },1000)
	//如果请求失败的话
	if (!userInput.value.trim()) return;

	// 添加用户消息
	const userMsg = { role: 'user', content: userInput.value.trim() };
	messages.value.push(userMsg);
	userInput.value = '';
	showHint.value = true;

	try {
		// 调用openai库的chat.completions.create（核心：用openai库，但底层走uni.request）
		const completion = await openai.chat.completions.create({
			model: "deepseek-chat",
			messages: [
				systemMessage,  // 系统提示
				...messages.value // 用户历史消息
			]
		});

		// 添加AI回复
		messages.value.push({
			role: 'assistant',
			content: completion.choices[0].message.content
		});

	} catch (err) {
		console.error("openai库调用错误：", err);
		messages.value.push({
			role: 'assistant',
			content: `调用失败：${err.message || '请稍后再试'}`
		});
	} finally {
		showHint.value = false;
	}
};
</script>

<style>
/* 手机端适配样式（px单位） */
.ai-container {
  width: 100%;
  min-height: 100vh;
  background-color: #f5f7fa;
  padding: 10px;
  box-sizing: border-box;
}

.chat-area {
  max-width: 350px;
  margin: 0 auto;
  background-color: #fff;
  border-radius: 8px;
  box-shadow: 0 2px 6px rgba(0,0,0,0.05);
  overflow: hidden;
}

.message-list {
  min-height: calc(100vh - 120px);
  padding: 15px 10px;
  box-sizing: border-box;
}

.system-message {
  text-align: center;
  color: #666;
  font-size: 13px;
  background-color: #f0f7ff;
  padding: 7px 10px;
  border-radius: 5px;
  margin-bottom: 15px;
  display: inline-block;
  max-width: 80%;
  margin-left: 10%;
}

.user-message, .ai-message {
  margin-bottom: 12px;
  max-width: 70%;
  padding: 10px;
  border-radius: 9px;
  word-break: break-all;
  font-size: 14px;
}

.user-message {
  background-color: #e6f7ff;
  margin-left: auto;
}

.ai-message {
  background-color: #f0f2f5;
  margin-right: auto;
}

.sender {
  font-weight: 500;
  margin-right: 5px;
}

.loading {
  text-align: center;
  color: #999;
  font-size: 13px;
  padding: 7px;
}

.input-area {
  display: flex;
  align-items: flex-end;
  padding: 7px;
  border-top: 1px solid #eee;
}

.input-box {
  flex: 1;
  min-height: 40px;
  max-height: 100px;
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 20px;
  font-size: 14px;
  resize: none;
  margin-right: 7px;
}

.send-btn {
  width: 60px;
  height: 40px;
  background-color: #6366f1;
  color: white;
  border: none;
  border-radius: 20px;
  font-size: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.send-btn:disabled {
  background-color: #ccc;
}
</style>